package cn.edu.nchu.fragmentdemo.db.server;

import com.j256.ormlite.dao.Dao;
import com.j256.ormlite.stmt.QueryBuilder;
import com.j256.ormlite.stmt.Where;

import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import cn.edu.nchu.fragmentdemo.bean.RouteTask;

/**
 * @className: RouteTaskDataServer
 * @description: 用于分页获取航线任务数据
 * @author: Kuangkeli
 * @date: 2023/10/04 10:43
 **/
public class RouteTaskDataServer {
    private static List<RouteTask> data = new ArrayList<>();

    public static List<RouteTask> getData(long lastVisibleItem, long PAGE_COUNT, Dao<RouteTask, Integer> routeTaskDao) {
        try {
            // 清空之前的数据
            data.clear();

            // 创建 QueryBuilder 对象
            QueryBuilder<RouteTask, Integer> queryBuilder = routeTaskDao.queryBuilder();

            Where<RouteTask, Integer> where = queryBuilder.where();

            // 添加过滤条件，获取 lastVisibleItem 之前的数据
            where.lt("id", lastVisibleItem);

            /**
             * 设置排序和分页参数
             */
            queryBuilder.orderBy("id", false);


            /**
             *  设置返回结果数量限制为 PAGE_COUNT
             */
            queryBuilder.limit(PAGE_COUNT);

            // 执行查询并将结果添加到 data 列表中
            List<RouteTask> queryResults = queryBuilder.query();

            data.addAll(queryResults);
        } catch (SQLException e) {
            e.printStackTrace();
        }

        // 返回分页结果
        return data;
    }

    public static void resetData() {
        data.clear();
    }

    public static int getMaxId(Dao<RouteTask, Integer> routeTaskDao) throws SQLException {
        QueryBuilder<RouteTask, Integer> queryBuilder = routeTaskDao.queryBuilder();

        // 执行原始 SQL 查询，选择 ID 的最大值
        queryBuilder.selectRaw("MAX(id)");

        // 获取结果
        Object result = routeTaskDao.queryRawValue(queryBuilder.prepareStatementString());

        // 转换结果为整数类型
        if (result instanceof Number) {
            return ((Number) result).intValue()+1;
        } else {
            throw new SQLException("Failed to get max id from database");
        }
    }
}




